package com.qishanor.wpan.service.impl;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qishanor.framework.common.oss.config.FileProperties;
import com.qishanor.framework.common.oss.service.FileTemplate;
import com.qishanor.framework.util.R;
import com.qishanor.wpan.mapper.WpanFileMapper;
import com.qishanor.wpan.model.WpanFile;
import com.qishanor.wpan.service.WpanFileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

/**
 * @description:
 * @author: 周振林
 * @date: 2023-05-24
 * @website: http://www.zhouzhenlin.com - 沉淀、分享、成长、让自己和他人都有所收获
 **/

@Service
public class WpanFileServiceImpl extends ServiceImpl<WpanFileMapper, WpanFile> implements WpanFileService {

    @Autowired
    private FileTemplate fileTemplate;
    @Autowired
    private FileProperties properties;

//    @Override
//    public R uploadFile(MultipartFile file) {
//        String fileName = IdUtil.simpleUUID() + StrUtil.DOT + FileUtil.extName(file.getOriginalFilename());
//
//        // Endpoint以华东1（杭州）为例，其它Region请按实际情况填写。
//        String endpoint = "https://oss-cn-shanghai.aliyuncs.com";
//        // 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
//        String accessKeyId = "";
//        String accessKeySecret = "";
//        // 填写Bucket名称，例如examplebucket。
//        String bucketName = "x-xiang-15";
//        // 填写Object完整路径，完整路径中不能包含Bucket名称，例如exampledir/exampleobject.txt。
//        String objectName = fileName;
//        // 创建OSSClient实例。
//        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
//
//        // 上传字符串。
//        PutObjectResult result = null;
//        try (InputStream inputStream = file.getInputStream()) {
//            // 创建PutObjectRequest对象。
//            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
//            // 设置该属性可以返回response。如果不设置，则返回的response为空。
//            putObjectRequest.setProcess("true");
//            // 上传字符串。
//            result = ossClient.putObject(putObjectRequest);
//            // 如果上传成功，则返回200。
//            System.out.println(result.getResponse().getStatusCode());
//        } catch (Exception e) {
//            log.error("上传失败", e);
//            return R.failed(e.getLocalizedMessage());
//        } finally {
//            if (ossClient != null) {
//                ossClient.shutdown();
//            }
//        }
//        if(result != null){
//            ResponseMessage responseMessage = result.getResponse();
//            if(responseMessage.getStatusCode() == 200){
//                Wpanfile wpanfile = new Wpanfile();
//                wpanfile.setRealName(file.getOriginalFilename());
//                wpanfile.setFinalName(objectName);
//                wpanfile.setDirType("0");
//                wpanfile.setDirParent(-1L);
//                wpanfile.setType(FileUtil.extName(file.getOriginalFilename()));
//                wpanfile.setSize(String.valueOf(file.getSize()));
//                wpanfile.setPlatform("阿里云OSS");
//                wpanfile.setUrl(responseMessage.getUri());
//                wpanfile.setDelFlag(0);
//                wpanfile.setCreateTime(LocalDateTime.now());
//                this.save(wpanfile);
//                return R.ok(JSON.toJSONString(responseMessage));
//            }
//        }
//        return R.failed("上传失败");
//
//
//        return null;
//    }

    @Override
    public R uploadFile(MultipartFile file) {
        String fileName = IdUtil.simpleUUID() + StrUtil.DOT + FileUtil.extName(file.getOriginalFilename());
        Map<String, String> resultMap = new HashMap<>(4);
        resultMap.put("bucketName", properties.getBucketName());
        resultMap.put("fileName", fileName);
        resultMap.put("url", String.format("/sys/file/%s/%s", properties.getBucketName(), fileName));

        try (InputStream inputStream = file.getInputStream()) {
            fileTemplate.putObject(properties.getBucketName(), fileName, inputStream, file.getContentType());
        }
        catch (Exception e) {
            log.error("上传失败", e);
            return R.failed(e.getLocalizedMessage());
        }

        WpanFile wpanFile=WpanFile.builder()
                .realName(file.getOriginalFilename())
                .finalName(fileName)
                .category("doc")
                .type(FileUtil.extName(file.getOriginalFilename()))
                
                .build();

        return R.ok(resultMap);
    }
}
